package com.yunti.yntk;

import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.google.android.flexbox.FlexboxLayout;
import org.jetbrains.annotations.NotNull;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public class BottomKeyboard extends ConstraintLayout {
    private final Context mContext;

    private TextView inputText;

    private TextView score1;
    private TextView score2;
    private TextView score3;

    private ImageView empty;

    private RadioGroup selectCount;

    private FlexboxLayout scorePreview;
    private List<Character> inputStr = new ArrayList<>();

    private int select = 0;

    private int mode = 0;

    //篮球计数
    private int count = 0;
    long preTime = 0;
    private boolean isStart;
    private long startTime;

    public BottomKeyboard.callBack getCallBack() {
        return callBack;
    }

    public void setCallBack(BottomKeyboard.callBack callBack) {
        this.callBack = callBack;
    }

    private callBack callBack;

    public BottomKeyboard(Context context) {
        super(context);
        mContext = context;
        init();
    }

    public BottomKeyboard(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        init();
    }

    public BottomKeyboard(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mContext = context;
        init();
    }

    public void init() {
        LayoutInflater.from(mContext).inflate(R.layout.bottomkeyboard, this);
        inputText = this.findViewById(R.id.inputText);
        empty = this.findViewById(R.id.empty);

        scorePreview = findViewById(R.id.scorePreview);

        score1 = this.findViewById(R.id.score1);
        score2 = this.findViewById(R.id.score2);
        score3 = this.findViewById(R.id.score3);

        scorePreview = this.findViewById(R.id.scorePreview);

        this.findViewById(R.id.key1).setOnClickListener(this::onKey);
        this.findViewById(R.id.key2).setOnClickListener(this::onKey);
        this.findViewById(R.id.key3).setOnClickListener(this::onKey);
        this.findViewById(R.id.key4).setOnClickListener(this::onKey);
        this.findViewById(R.id.key5).setOnClickListener(this::onKey);
        this.findViewById(R.id.key6).setOnClickListener(this::onKey);
        this.findViewById(R.id.key7).setOnClickListener(this::onKey);
        this.findViewById(R.id.key8).setOnClickListener(this::onKey);
        this.findViewById(R.id.key9).setOnClickListener(this::onKey);

        selectCount = this.findViewById(R.id.selectCount);
        selectCount.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                System.out.println(checkedId);
                onchange(checkedId);
                if (checkedId == R.id.selectOne) {
                    select = 1;
                }
                if (checkedId == R.id.selectTwo) {
                    select = 2;
                }
                if (checkedId == R.id.selectThree) {
                    select = 3;
                }
            }
        });


        this.findViewById(R.id.keysy).setOnClickListener(this::onKey);
        this.findViewById(R.id.keydy).setOnClickListener(this::onKey);
        this.findViewById(R.id.key0).setOnClickListener(this::onKey);

        this.findViewById(R.id.keydelete).setOnLongClickListener(this::delete);

        this.findViewById(R.id.keydelete).setOnClickListener(this::onKey);
        this.findViewById(R.id.keydiscount).setOnClickListener(this::onKey);
        this.findViewById(R.id.keycancel).setOnClickListener(this::onKey);
        this.findViewById(R.id.keyconfirm).setOnClickListener(this::onKey);
    }

    private boolean delete(View view) {
        inputStr.clear();
        String result = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
            result = inputStr.stream()
                    .map(String::valueOf)
                    .collect(Collectors.joining());
        }
        inputText.setText(result);
        return true;
    }

    public void onKey(View view) {
        int id = view.getId();
        System.out.println(id);
        if (id == R.id.key1) {
            inputStr.add('1');
        }
        if (id == R.id.key2) {
            inputStr.add('2');
        }
        if (id == R.id.key3) {
            inputStr.add('3');
        }
        if (id == R.id.key4) {
            inputStr.add('4');
        }
        if (id == R.id.key5) {
            inputStr.add('5');
        }
        if (id == R.id.key6) {
            inputStr.add('6');
        }
        if (id == R.id.key7) {
            inputStr.add('7');
        }
        if (id == R.id.key8) {
            inputStr.add('8');
        }
        if (id == R.id.key9) {
            inputStr.add('9');
        }
        if (id == R.id.keydy) {
            inputStr.add('.');
        }
        if (id == R.id.keysy) {
            inputStr.add(':');
        }
        if (id == R.id.key0) {
            inputStr.add('0');
        }
        if (id == R.id.keydiscount) {
            inputStr.add('-');
        }

        if (id == R.id.keydelete) {
            if (inputStr.size() > 0) {
                inputStr.remove(inputStr.size() - 1);
            }
        }

        if (id == R.id.keyconfirm) {
            updateScore();
        }
        if (id == R.id.keycancel) {
            this.setVisibility(GONE);
        }


        String result = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
            result = inputStr.stream()
                    .map(String::valueOf)
                    .collect(Collectors.joining());
        }
        inputText.setText(result);
    }


    public void onchange(int checkedId) {
        scorePreview.removeAllViews();
//        //助跑摸高
//        if ("0030".equals(subInfo.getZxdm().trim()) && (checkedId == R.id.selectOne || checkedId == R.id.selectTwo)) {
//            empty.setVisibility(GONE);
//            View view = LayoutInflater.from(mContext).inflate(R.layout.toulan, scorePreview);
//            mode = 1;
//        } else if ("0032".equals(subInfo.getZxdm().trim()) && (checkedId == R.id.selectOne || checkedId == R.id.selectTwo)) {
//            empty.setVisibility(GONE);
//            View view = LayoutInflater.from(mContext).inflate(R.layout.toulan, scorePreview);
//            TextView add = view.findViewById(R.id.add);
//            add.setOnClickListener(new OnClickListener() {
//                @Override
//                public void onClick(View v) {
//                    count++;
//                    post(() -> {
//                        inputText.setText(count + "");
//                    });
//                }
//            });
//            TextView min = view.findViewById(R.id.min);
//            min.setOnClickListener(new OnClickListener() {
//                @Override
//                public void onClick(View v) {
//                    count--;
//                    post(() -> {
//                        inputText.setText(count + "");
//                    });
//                }
//            });
//            mode = 2;
//            count = 0;
//        } else {
//
//        }
    }

    public void show(Context baseContext) {
        this.setVisibility(VISIBLE);
        selectCount.check(R.id.selectOne);
        updateinfo();
    }


    private void onStringCallBack(String s) {
        if (s.trim().equals("1")) {
            if (preTime != 0 && (System.currentTimeMillis() - preTime) < 1000) {
                return;
            }
            preTime = System.currentTimeMillis();
            startGame();
        }
    }

    private void startGame() {
        DecimalFormat df = new DecimalFormat("00.00");
        if (!isStart) {
            isStart = true;
            new Thread(() -> {
                startTime = System.currentTimeMillis();
                while (isStart) {
                    long nowTime = System.currentTimeMillis() - startTime;
                    String nowTimeStr = df.format(nowTime / 1000.0) + "";
                    inputStr.clear();
                    post(() -> {
                        inputText.setText(nowTimeStr + "");
                    });
                    try {
                        Thread.sleep(16);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        } else {
            isStart = false;
        }
    }

    public void updateScore() {
//        if (inputText.getText().toString().trim().equals("")) {
//            ToastUtils.toast(getContext(), "输入为空");
//            return;
//        }
//        String score = inputText.getText().toString();
//        new Thread(() -> {
//            Zx zx = zxDao.getZxStuByKh(subInfo.getKh(), subInfo.getZxdm());
//            if (select == 1) {
//                zx.setCj1(score);
//                subInfo.setCj1(score);
//            }
//            if (select == 2) {
//                zx.setCj2(score);
//                subInfo.setCj2(score);
//            }
//            if (select == 3) {
//                zx.setCj3(score);
//                subInfo.setCj3(score);
//            }
//            zxDao.update(zx);
//            post(new Runnable() {
//                @Override
//                public void run() {
//                    updateinfo();
//                }
//            });
//            if (callBack != null) {
//                callBack.scoreChange();
//            }
//        }).start();
//        post(() -> {
//            inputText.setText("");
//            count = 0;
//        });
    }

    public void updateinfo() {
//        if (subInfo.getCj1() == null || subInfo.getCj1().trim().equals("")) {
//            score1.setText("未录入");
//        } else {
//            score1.setText(subInfo.getCj1());
//        }
//        if (subInfo.getCj2() == null || subInfo.getCj2().trim().equals("")) {
//            score2.setText("未录入");
//        } else {
//            score2.setText(subInfo.getCj2());
//        }
//        if (subInfo.getCj3() == null || subInfo.getCj3().trim().equals("")) {
//            score3.setText("未录入");
//        } else {
//            score3.setText(subInfo.getCj3());
//        }
    }

    public interface callBack {
        public void scoreChange();
    }

    private void onNewData(byte[] value) {
//        if(mode==1){
//            for (int i = 0; i < value.length; i++) {
//                byteList.add(value[i]);
//                if(byteList.size()>13){
//                    byteList.remove(0);
//                }
//            }
//
//            if(byteList.size()==13){
//                if(byteList.get(12)==0x0A && byteList.get(11)==0x0D){
//                    byte[] result = new byte[]{byteList.get(9),byteList.get(10)};
//                    int score = Integer.parseInt(getNumeric(new String(result))) + ConfigManager.getInstance().getStartPosition();
//                    inputStr.clear();
//                    post(()->{
//                        inputText.setText(score + "");
//                    });
//                }
//            }
//        }
//
//        if(mode==2){
//            if(preTime != 0 && (System.currentTimeMillis() - preTime) < 3000){
//                return;
//            }
//            preTime = System.currentTimeMillis();
//            count++;
//            inputStr.clear();
//            post(()->{
//                inputText.setText(count + "");
//            });
//        }
    }


    /**
     * 过滤非数字
     *
     * @param str
     * @return
     */
    public static String getNumeric(String str) {
        String regEx = "[^0-9]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        return m.replaceAll("").trim();
    }

}
